// package com.hjj.homieMatching.util;

// import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
// import com.hjj.homieMatching.constant.RedisConstant;
// import com.hjj.homieMatching.mapper.UserMapper;
// import com.hjj.homieMatching.model.domain.User;
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
// import org.springframework.boot.CommandLineRunner;
// import org.springframework.boot.SpringApplication;
// import org.springframework.boot.autoconfigure.SpringBootApplication;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.ComponentScan;
// import org.springframework.data.geo.Point;
// import org.springframework.data.redis.core.StringRedisTemplate;
// import org.springframework.stereotype.Component;

// import javax.annotation.Resource;
// import java.util.List;

// @Component
// public class RedisGeoRecovery {
    
//     /**
//      * 创建一个独立的Spring Boot应用程序，用于恢复Redis中的地理位置数据
//      */
//     @SpringBootApplication
//     @ComponentScan("com.hjj.homieMatching")
//     public static class RecoveryApplication {
        
//         @Bean
//         public CommandLineRunner commandLineRunner(RedisGeoRecovery redisGeoRecovery) {
//             return args -> {
//                 System.out.println("开始恢复Redis中的地理位置数据...");
//                 redisGeoRecovery.recoverGeoData();
//                 System.out.println("恢复完成，程序将自动退出");
//                 // 完成后退出应用
//                 System.exit(0);
//             };
//         }
        
//         /**
//          * 主方法，用于直接运行恢复程序
//          * 使用方法：java -jar your-application.jar com.hjj.homieMatching.util.RedisGeoRecovery$RecoveryApplication
//          */
//         public static void main(String[] args) {
//             SpringApplication.run(RecoveryApplication.class, args);
//         }
//     }
//     private static final Logger log = LoggerFactory.getLogger(RedisGeoRecovery.class);

//     @Resource
//     private UserMapper userMapper;

//     @Resource
//     private StringRedisTemplate stringRedisTemplate;

//     /**
//      * 从MySQL数据库恢复用户地理位置数据到Redis
//      * 解决用户距离计算问题
//      */
//     /**
//      * 恢复Redis中的地理位置数据
//      * 可以通过API调用此方法，也可以通过主方法直接运行
//      */
//     public void recoverGeoData() {
//         // 先清除Redis中现有的地理位置数据
//         stringRedisTemplate.delete(RedisConstant.USER_GEO_KEY);
//         log.info("已清除Redis中的地理位置数据");
        
//         // 查询所有有坐标的用户
//         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//         queryWrapper.isNotNull("longitude");
//         queryWrapper.isNotNull("dimension");
//         List<User> userList = userMapper.selectList(queryWrapper);
//         log.info("找到{}个有坐标的用户", userList.size());

//         // 将用户坐标重新写入Redis
//         int successCount = 0;
//         for (User user : userList) {
//             Long result = stringRedisTemplate.opsForGeo().add(RedisConstant.USER_GEO_KEY,
//                     new Point(user.getLongitude(), user.getDimension()),
//                     String.valueOf(user.getId()));
//             if (result != null && result > 0) {
//                 successCount++;
//             }
//         }
//         log.info("成功恢复{}个用户的地理位置数据到Redis", successCount);
//     }
// }